﻿///////////////////////////////////////////////////////////////////////////////
// File:        MessageBlock.hpp
// Author:      671643387@qq.com
// Date:        2016年1月5日 下午5:43:01
// Description:
///////////////////////////////////////////////////////////////////////////////

#ifndef UTIL_MESSAGEBLOCK_HPP_
#define UTIL_MESSAGEBLOCK_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <memory.h>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <fog/Typedef.hpp>

namespace fog
{
    namespace util
    {
        class MessageBlock
        {
        public:
            MessageBlock(const BYTE_t *data, std::size_t len)
                : data_(len)
                , rpos_(0)
            {
                memcpy(&data_[0], data, len);
            }

            const BYTE_t *contents(void) const
            {
                return &data_[rpos_];
            }

            std::size_t size(void) const
            {
                return (data_.size() - rpos_);
            }

            std::size_t rpos(std::size_t pos)
            {
                rpos_ += pos;
                return rpos_;
            }

        private:
            std::vector<BYTE_t> data_;
            std::size_t rpos_;
        };

        typedef boost::shared_ptr<MessageBlock> MessageBlockPtr;
    }
}

#endif /* UTIL_MESSAGEBLOCK_HPP_ */
